import Statistic from './sequelize/Statistic';

export class StatisticService {
  /**
   * 保存统计数据
   * @param sessionId 直播场次ID
   * @param audienceCount 观众数量
   */
  async saveStatistic(sessionId: string, audienceCount: number): Promise<void> {
    try {
      await Statistic.create({
        sessionId,
        audienceCount
      });
      
      console.log(`📊 保存统计数据: sessionId=${sessionId}, audienceCount=${audienceCount}`);
    } catch (error) {
      console.error('❌ 保存统计数据失败:', error);
      throw error;
    }
  }

  /**
   * 获取指定场次的统计数据
   * @param sessionId 直播场次ID
   * @param limit 限制数量
   */
  async getSessionStatistics(sessionId: string, limit: number = 100) {
    try {
      return await Statistic.findAll({
        where: { sessionId },
        order: [['createdAt', 'ASC']],
        limit
      });
    } catch (error) {
      console.error('❌ 获取统计数据失败:', error);
      throw error;
    }
  }

  /**
   * 获取指定时间范围内的统计数据
   * @param sessionId 直播场次ID
   * @param startTime 开始时间
   * @param endTime 结束时间
   */
  async getStatisticsByTimeRange(sessionId: string, startTime: Date, endTime: Date) {
    try {
      const { Op } = require('sequelize');
      return await Statistic.findAll({
        where: {
          sessionId,
          createdAt: {
            [Op.between]: [startTime, endTime]
          }
        },
        order: [['createdAt', 'ASC']]
      });
    } catch (error) {
      console.error('❌ 获取时间范围统计数据失败:', error);
      throw error;
    }
  }

  /**
   * 获取最新的统计数据
   * @param sessionId 直播场次ID
   */
  async getLatestStatistic(sessionId: string) {
    try {
      return await Statistic.findOne({
        where: { sessionId },
        order: [['createdAt', 'DESC']]
      });
    } catch (error) {
      console.error('❌ 获取最新统计数据失败:', error);
      throw error;
    }
  }
}